<?php
/**
 * CognitiveModuleManager - 认知模块管理类
 * 
 * 提供认知模块及其内容的管理功能，包括:
 * - 获取认知模块列表
 * - 获取单个认知模块详情
 * - 新增、编辑、删除认知模块
 * - 管理认知模块内容
 * - 管理内容示例
 */
class CognitiveModuleManager {
    private $db;
    
    /**
     * 构造函数
     */
    public function __construct() {
        require_once __DIR__ . '/db/Database.php';
        $this->db = Database::getInstance();
    }
    
    /**
     * 获取指定年龄段的所有认知模块
     * 
     * @param string $ageGroup 年龄段，如 "3-4"
     * @return array 认知模块列表
     */
    public function getAllModules($ageGroup) {
        $sql = "SELECT * FROM cognitive_modules 
                WHERE age_group = ? AND is_active = 1 
                ORDER BY display_order ASC";
        return $this->db->fetchAll($sql, [$ageGroup]);
    }
    
    /**
     * 通过ID获取认知模块
     * 
     * @param int $moduleId 模块ID
     * @return array|null 认知模块信息
     */
    public function getModuleById($moduleId) {
        $sql = "SELECT * FROM cognitive_modules WHERE module_id = ?";
        return $this->db->fetchRow($sql, [$moduleId]);
    }
    
    /**
     * 通过key获取认知模块
     * 
     * @param string $moduleKey 模块key
     * @param string $ageGroup 年龄段
     * @return array|null 认知模块信息
     */
    public function getModuleByKey($moduleKey, $ageGroup) {
        $sql = "SELECT * FROM cognitive_modules 
                WHERE module_key = ? AND age_group = ?";
        return $this->db->fetchRow($sql, [$moduleKey, $ageGroup]);
    }
    
    /**
     * 添加新的认知模块
     * 
     * @param array $moduleData 模块数据
     * @return int 新模块ID
     */
    public function addModule($moduleData) {
        return $this->db->insert('cognitive_modules', $moduleData);
    }
    
    /**
     * 更新认知模块
     * 
     * @param int $moduleId 模块ID
     * @param array $moduleData 模块数据
     * @return bool 是否成功
     */
    public function updateModule($moduleId, $moduleData) {
        return $this->db->update('cognitive_modules', $moduleData, 'module_id = ?', [$moduleId]) > 0;
    }
    
    /**
     * 删除认知模块
     * 
     * @param int $moduleId 模块ID
     * @return bool 是否成功
     */
    public function deleteModule($moduleId) {
        return $this->db->delete('cognitive_modules', 'module_id = ?', [$moduleId]) > 0;
    }
    
    /**
     * 获取模块的所有内容
     * 
     * @param int $moduleId 模块ID
     * @return array 内容列表
     */
    public function getModuleContents($moduleId) {
        $sql = "SELECT * FROM cognitive_contents 
                WHERE module_id = ? AND is_active = 1 
                ORDER BY content_order ASC";
        return $this->db->fetchAll($sql, [$moduleId]);
    }
    
    /**
     * 获取单个内容详情
     * 
     * @param int $contentId 内容ID
     * @return array|null 内容详情
     */
    public function getContentById($contentId) {
        $sql = "SELECT * FROM cognitive_contents WHERE content_id = ?";
        return $this->db->fetchRow($sql, [$contentId]);
    }
    
    /**
     * 添加新的认知内容
     * 
     * @param array $contentData 内容数据
     * @return int 新内容ID
     */
    public function addContent($contentData) {
        return $this->db->insert('cognitive_contents', $contentData);
    }
    
    /**
     * 更新认知内容
     * 
     * @param int $contentId 内容ID
     * @param array $contentData 内容数据
     * @return bool 是否成功
     */
    public function updateContent($contentId, $contentData) {
        return $this->db->update('cognitive_contents', $contentData, 'content_id = ?', [$contentId]) > 0;
    }
    
    /**
     * 删除认知内容
     * 
     * @param int $contentId 内容ID
     * @return bool 是否成功
     */
    public function deleteContent($contentId) {
        return $this->db->delete('cognitive_contents', 'content_id = ?', [$contentId]) > 0;
    }
    
    /**
     * 获取内容的所有示例
     * 
     * @param int $contentId 内容ID
     * @return array 示例列表
     */
    public function getContentExamples($contentId) {
        $sql = "SELECT * FROM content_examples 
                WHERE content_id = ? AND is_active = 1 
                ORDER BY example_order ASC";
        return $this->db->fetchAll($sql, [$contentId]);
    }
    
    /**
     * 获取单个示例详情
     * 
     * @param int $exampleId 示例ID
     * @return array|null 示例详情
     */
    public function getExampleById($exampleId) {
        $sql = "SELECT * FROM content_examples WHERE example_id = ?";
        return $this->db->fetchRow($sql, [$exampleId]);
    }
    
    /**
     * 添加新的内容示例
     * 
     * @param array $exampleData 示例数据
     * @return int 新示例ID
     */
    public function addExample($exampleData) {
        return $this->db->insert('content_examples', $exampleData);
    }
    
    /**
     * 更新内容示例
     * 
     * @param int $exampleId 示例ID
     * @param array $exampleData 示例数据
     * @return bool 是否成功
     */
    public function updateExample($exampleId, $exampleData) {
        return $this->db->update('content_examples', $exampleData, 'example_id = ?', [$exampleId]) > 0;
    }
    
    /**
     * 删除内容示例
     * 
     * @param int $exampleId 示例ID
     * @return bool 是否成功
     */
    public function deleteExample($exampleId) {
        return $this->db->delete('content_examples', 'example_id = ?', [$exampleId]) > 0;
    }
    
    /**
     * 获取知识百科列表
     * 
     * @param int $moduleId 模块ID
     * @return array 知识百科列表
     */
    public function getEncyclopediaEntries($moduleId) {
        $sql = "SELECT * FROM knowledge_encyclopedia 
                WHERE module_id = ? AND is_active = 1 
                ORDER BY encyclopedia_order ASC";
        return $this->db->fetchAll($sql, [$moduleId]);
    }
    
    /**
     * 获取单个百科条目
     * 
     * @param int $encyclopediaId 百科ID
     * @return array|null 百科条目
     */
    public function getEncyclopediaById($encyclopediaId) {
        $sql = "SELECT * FROM knowledge_encyclopedia WHERE encyclopedia_id = ?";
        return $this->db->fetchRow($sql, [$encyclopediaId]);
    }
    
    /**
     * 添加新的百科条目
     * 
     * @param array $encyclopediaData 百科数据
     * @return int 新百科ID
     */
    public function addEncyclopedia($encyclopediaData) {
        return $this->db->insert('knowledge_encyclopedia', $encyclopediaData);
    }
    
    /**
     * 更新百科条目
     * 
     * @param int $encyclopediaId 百科ID
     * @param array $encyclopediaData 百科数据
     * @return bool 是否成功
     */
    public function updateEncyclopedia($encyclopediaId, $encyclopediaData) {
        return $this->db->update('knowledge_encyclopedia', $encyclopediaData, 'encyclopedia_id = ?', [$encyclopediaId]) > 0;
    }
    
    /**
     * 删除百科条目
     * 
     * @param int $encyclopediaId 百科ID
     * @return bool 是否成功
     */
    public function deleteEncyclopedia($encyclopediaId) {
        return $this->db->delete('knowledge_encyclopedia', 'encyclopedia_id = ?', [$encyclopediaId]) > 0;
    }
    
    /**
     * 获取媒体资源
     * 
     * @param int $mediaId 媒体ID
     * @return array|null 媒体信息
     */
    public function getMediaById($mediaId) {
        $sql = "SELECT * FROM media_resources WHERE media_id = ?";
        return $this->db->fetchRow($sql, [$mediaId]);
    }
    
    /**
     * 添加新的媒体资源
     * 
     * @param array $mediaData 媒体数据
     * @return int 新媒体ID
     */
    public function addMedia($mediaData) {
        return $this->db->insert('media_resources', $mediaData);
    }
} 